package com.battery.system.mapper;

import com.battery.system.base.BaseMapper;
import com.battery.system.domain.BO.PartnerBO;
import com.battery.system.domain.Partner;
import com.battery.system.domain.PartnerUser;
import com.battery.system.domain.VO.Finance;
import com.battery.system.domain.VO.PartnerDevAllotVO;
import com.battery.system.domain.VO.PartnerVO;
import com.battery.system.domain.VO.PartnerVV;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 合作商Mapper接口
 *
 * @author battery
 * @date 2021-01-21
 */
public interface PartnerMapper extends BaseMapper<Partner> {
    /**
     * 查询合作商
     *
     * @param id 合作商ID
     * @return 合作商
     */
    public Partner selectPartnerById(String id);

    /**
     * 查询合作商列表
     *
     * @param partner 合作商
     * @return 合作商集合
     */
    public List<Partner> selectPartnerList(Partner partner);

    /**
     * 新增合作商
     *
     * @param partner 合作商
     * @return 结果
     */
    public int insertPartner(Partner partner);

    /**
     * 修改合作商
     *
     * @param partner 合作商
     * @return 结果
     */
    public int updatePartner(Partner partner);

    /**
     * 删除合作商
     *
     * @param id 合作商ID
     * @return 结果
     */
    public int deletePartnerById(String id);

    /**
     * 批量删除合作商
     *
     * @param ids 需要删除的数据ID
     * @return 结果
     */
    public int deletePartnerByIds(String[] ids);

    /**
     * 查询合作商列表
     *
     * @param partnerBO
     * @return
     */
    List<PartnerVO> selectPartnerVOList(@Param("partnerBO") PartnerBO partnerBO);

    List<PartnerVV> selectPartnerVOLists(@Param("id") String id, @Param("i") int i);

    PartnerVV selectPartnerVOListsById(String id);

    /**
     * 查询顶级合作商列表数据
     *
     * @return
     */
    List<PartnerVO> selectHeadPartnerVOList();

    Finance selectFinancePartner(@Param("id") String id);


    Finance selectFinanceMerchant(@Param("id") String id);

    PartnerUser selectApplyCount(@Param("id") String id);

    /**
     * 获取该合作商所有上级合作商信息
     *
     * @param id
     * @return
     */
    List<Partner> selectAllParents(String id);

    /**
     * 查询合作商营业额top6
     *
     * @return
     */
    List<Partner> selectPartnerTop6List();

    /**
     * 设备-调拨专用 用于获取合作商信息包含他自身
     *
     * @param accountId
     * @return
     */
    List<PartnerDevAllotVO> selectPartnersDevAllot(@Param("accountId") String accountId, @Param("keywords") String keywords);

    /**
     * @param id
     * @return
     */
    PartnerVO selectStatisticalAnalysisVo(String id);

    /**
     * 查询该合作商的子节点id集合，包含自身ID
     *
     * @param id
     * @return
     */
    String getPartnerChildIdStrAndSelf(String id);

    /**
     * 查询该合作商的所有父节点，不包含自身
     *
     * @param id
     * @return
     */
    String selectAllParentsIds(String id);
}
